import 'package:get/get.dart';
import '../services/index.dart';
import '../models/index.dart';

/// 用户资料访问Mixin
/// 
/// 🎯 企业级用户信息访问统一入口
/// 
/// 职责：
/// - 为Controller提供统一的用户信息访问接口
/// - 避免Controller直接访问UserService的复杂逻辑
/// - 统一命名规范和访问模式
/// - 减少重复代码，保持架构清晰
/// 
/// 使用方式：
/// ```dart
/// class MyController extends GetxController with UserProfileMixin {
///   void someMethod() {
///     if (isLoggedIn) {
///       print('用户ID: $userId');
///       print('用户名: $userName');
///     }
///   }
/// }
/// ```
mixin UserProfileMixin {
  // 获取UserService实例
  UserService get _userService => Get.find<UserService>();

  // ==================== 核心状态访问 ====================
  
  /// 获取当前用户信息模型
  UserProfileModel? get currentUserProfile => _userService.currentUserProfile;
  
  /// 检查是否已登录
  bool get isLoggedIn => _userService.isLoggedIn;
  
  // ==================== 用户基本信息访问器 ====================
  
  /// 获取用户ID
  String get userId => _userService.currentUserProfile?.userId.toString() ?? '';
  
  /// 获取用户名（登录账号）
  String get userName => _userService.currentUserProfile?.userName ?? '';
  
  /// 获取用户昵称（显示名称）
  String get nickName => _userService.currentUserProfile?.nickName ?? '';
  
  /// 获取用户显示名称（优先昵称，其次用户名）
  String get userDisplayName => _userService.currentUserProfile?.displayName ?? '未知用户';
  
  /// 获取用户头像URL
  String get userAvatarUrl => _userService.currentUserProfile?.avatarUrl ?? '';
  
  /// 获取用户邮箱
  String get userEmail => _userService.currentUserProfile?.email ?? '未设置';
  
  /// 获取用户手机号
  String get userPhone => _userService.currentUserProfile?.phonenumber ?? '未设置';
  
  /// 获取用户性别文本
  String get userSex => _userService.currentUserProfile?.sexText ?? '未知';
  
  /// 获取用户状态文本
  String get userStatus => _userService.currentUserProfile?.statusText ?? '未知';
  
  // ==================== 用户权限角色访问器 ====================
  
  /// 获取用户权限列表
  List<String> get userPermissions {
    // 当前实现返回空列表，实际项目中需要从roles中提取
    return [];
  }
  
  /// 获取用户角色列表
  List<String> get userRoles {
    return _userService.currentUserProfile?.roles?.map((role) => role.roleKey ?? '').toList() ?? [];
  }
  
  /// 检查是否有指定权限（调用UserService的业务逻辑）
  bool hasPermission(String permission) => _userService.hasPermission(permission);
  
  /// 检查是否有指定角色（调用UserService的业务逻辑）
  bool hasRole(String role) => _userService.hasRole(role);
  
  /// 检查是否是管理员
  bool get isAdmin => _userService.currentUserProfile?.admin == true;
  
  // ==================== 部门信息访问器 ====================
  
  /// 获取用户部门名称
  String get userDeptName => _userService.currentUserProfile?.dept?.deptName ?? '未设置';
  
  /// 获取用户部门ID
  int get userDeptId => _userService.currentUserProfile?.deptId ?? 0;
  
  /// 获取用户角色组
  String get userRoleGroup => _userService.currentUserProfile?.roleGroup ?? '未设置';
  
  /// 获取用户岗位组
  String get userPostGroup => _userService.currentUserProfile?.postGroup ?? '未设置';
}
